package 中等.模拟;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 给定三个整数 x 、 y 和 bound ，返回 值小于或等于 bound 的所有 强整数 组成的列表 。
 * 如果某一整数可以表示为 xi + yj ，其中整数 i >= 0 且 j >= 0，那么我们认为该整数是一个 强整数 。
 * 你可以按 任何顺序 返回答案。在你的回答中，每个值 最多 出现一次。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/powerful-integers
 */
public class 强整数_970 {

    public static void main(String[] args) {

    }

    /**
     * 枚举+模拟+哈希表
     */
    public List<Integer> powerfulIntegers(int x, int y, int bound) {
        Set<Integer> set = new HashSet<>();

        for (int i = 0; i < 32; i++) {
            int a = (int) Math.pow(x, i);
            if (a > bound) {
                break;
            }
            for (int j = 0; j < 32; j++) {
                int b = (int) Math.pow(y, j);
                if (a + b > bound) {
                    break;
                }

                set.add(a + b);
            }
        }
        return new ArrayList<>(set);
    }

}
